colorscheme:
yellow
violet
bw
Prihlásenie:
Login: Heslo:

Problem statement: zenitlearn

Učíme sa súťažiť v programovaní
Časový limit: 100 ms  

Táto úloha je určená najmä tým, ktorí nemajú príliš veľa skúseností so Zenitom a podobným typom súťaží. K dispozícii máme modelový problém a tiež nekvalitné pokusy o jeho riešenie v každom z podporovaných jazykov. Tiež popisujeme niekoľko štandardných chýb, ktoré sú v týchto riešeniach prítomné. Vašou úlohou je tieto chyby v programoch opraviť a odovzdať upravené riešenie. Testovač vám prezradí, či ste boli úspešní.

Znalosť a schopnosť vyvarovať sa týchto chýb z vás automaticky nespraví úspešného riešiteľa Zenitu. Pomôže vám to ale nebabrať sa s technickými detailami a sústrediť sa na to podstatné: ako korektne a dostatočne kvalitne naprogramovať zadané úlohy. Ak sa chcete získať tento skill, musíte vyriešiť všetky ostatné úlohy z archívu na tejto stránke:).

Problém

Na prvom riadku vstupu je jediné číslo \(N\). Toto číslo je celé, kladné a nepresahuje 100,000. Na ďalšom riadku je \(N\) celých čísel. Každé dve susedné čísla sú oddelené jednou medzerou. Žiadne z týchto čísel v absolútnej hodnote nebude väčšie ako 100,000.

Záporné čísla v tomto zozname ignorujte. Na výstup vypíšte priemer a súčet nezáporných čísel. Presnejšie, na prvý riadok výstupu vypíšte hlášku Sucet cisel: < sucet > a na druhý riadok výstupu vypíšte Priemer cisel: < priemer >, kde priemer je dolná celá časť aritmetického priemeru nezáporných čísel na vstupe (teda celé číslo).

V prípade, že sa na vstupe nenachádza žiadne nezáporné číslo, vypíšte hlášku Ziadne nezaporne cisla.

Pokus o riešenie v Pascale (TODO), C++ a v Pythone (TODO).

Chyby v riešeniach

  1. Použitie knižníc, ktoré nie sú súčasťou štandardnej knižnice jazyka (a často sú závislé od operačného systému) je zakázané. Najčastejšie sa to týka knižníc conio a curses v C/C++ a crt v Pascale. Pozrite si záložku pomoc, kde nájdete presné informácie o používaných kompilátoroch. Na bežných súťažiach v programovaní (nielen na Zenite) nepotrebujete nič, čo vám zvyčajné štandardné vybavenie vášho jazyka neponúka.
  2. Vstup nenačítavajte zo žiadneho vstupného súboru. Načítavajte z takzvaného štandardného vstupu, čo je prakticky to isté ako načítavanie z klávesnice. Pozrite si záložku pomoc pre viac detailov.
  3. Jednou z najčastejších chýb je takzvané pretekanie premennej. Stane sa to vtedy, keď sa do premennej pokúsime uložiť väčšiu hodnotu než sa tam zmestí. Pri deklarácii premenných sa vždy zamyslite, aké veľké hodnoty si budete potrebovať pamätať. Tento problém sa zvyčajne týka skôr celočíselných typov. Pri reálnej aritmetike skôr narazíme na stratu presnosti a venujeme sa jej v inom odstavci. V drvivej väčšine úloh na Zenite postačujú 64-bitové celočíselné premenné: long long v C/C++ a Int64 v Pascale. V Pythone sú štandardné celočíselné typy neobmedzené (aspoň nie v tomto slova zmysle) takže tento problém nezvykneme riešiť.
  4. Toto je skôr zbytočnosť ako chyba. Ak zadanie tvrdí, že vstup bude spĺňať nejaké vlastnosti, potom to môžete predpokladať a netreba to overovať. Strácate tak čas, ktorý vám počas súťaže bude chýbať inde.
  5. Reálne čísla na počítači nefungujú tak pekne, ako by sme si želali. Nebudeme zachádzať do detailov a povieme si len, že veľmi často je možné vyhnúť sa ich použitiu. To je aj príklad tejto úlohy. Koniec koncov, zadanie od nás chce, aby sme vypísali celé číslo. Vyhneme sa tak potenciálnym problémom pri zaokrúhľovaní, strate presnosti a formátovaní výstupu.
  6. Toto je viac logická chyba ako technická. Nesmiete zabudnúť na žiadny špeciálny prípad, ktorý sa podľa zadania môže na vstupe vyskytnúť. Čo máme robiť, ak je počet nezáporných číse 0?
  7. Keď zadanie požaduje výpis konkrétnej hlášky, zvyčajne očakáva zhodu znak po znaku. Preklepy pri ručnom prepisovaní textových odpovedí zo zadania môžu znehodnotiť program, ktorý je inak úplne správny. V prípade, že máte k dispozícii elektronické zadania, odporúčame hlášku prekopírovať.
  8. Každý výstup sa musí končiť práve jedným znakom nového riadku. Testovač zvyčajne kontroluje zhodu vášho výstupu s očakávaným znak po znaku a znak nového riadku je súčasťou týchto očakávaní. Absencia znaku nového riadku teda spôsobí, že vaša odpoveď bude považovaná za nesprávnu.

Príklady

Input:

4
2 -1 0 5

Output:

Sucet cisel: 7
Priemer cisel: 2

(C) MišoF, Zemčo. 2007 - 2013